SSRF ME
tcl
刚拿到这题就直接分析源码,代码看是看懂了.但完全没有思路,那个action不是写死了吗?secret token我不知道啊?哎,吃了没听说哈希扩展攻击的亏..
之后看到了writeup,就来梳理一下.
writeup:
#!/usr/bin/python2 |
网站有两个功能,scan和read.scan负责读取数据并写入到本地,read负责读取本地保存的数据.每次执行操作前需比对sign,如果不对则返回500错误.
然后我们这边就要先读取flag.txt.
具体执行读取文件是在源代码中的86行,使用urlopen打开传递的param参数的文件.这个地方还有个waf函数,所以param参数不能以file和gopher开头.但其实直接写flag.txt就完事了.
在读取前,需要先获取sign.于是构造:http://139.180.128.96/geneSign?param=flag.txt
并在访问时构造cookie={'action':'scan'}
访问得到sign为8370bdba94bd5aaf7427b84b3f52d7cb.也就是secret_key+flag.txt+scan的哈希值.
之后我们就要执行读取操作,但并不知道secret_key的值无法重新计算哈希值.于是就要用到哈希长度扩展攻击了.
哈希长度扩展攻击
使用条件:
已知明文长度
已知哈希值
已知明文结尾处字符
进行攻击
root@DESKTOP-Q7DV3IJ:~# hashpump |
这里攻击后直接生成了secret_key+flag.txt+"scan\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe0\x00\x00\x00\x00\x00\x00\x00read"的哈希值:d7163f39ab78a698b3514fd465e4018a
然后我们构造url:http://139.180.128.86/De1ta?param=flag.txtcookies={‘action’:’scan\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe0\x00\x00\x00\x00\x00\x00\x00read’,’sign’:’d7163f39ab78a698b3514fd465e4018a’
这样,就可以使用伪造的签名愉快的去获取flag啦~
碎碎念
其他的题目…目前还没有能做出来的.做完了再更新吧.把一道题目的解法写出来就像是给别人讲解一样,在讲解的同时也是在梳理知识点,加深自己的印象,是一个很好的习惯.